package com.sjf.day02.Queue;

/**
 * 数组队列
 *
 * @author <huangtang>
 * @since 2021/12/16 10:07
 **/
public class ArrayQueue {
    private int maxSize;//数组容量
    private int front;//队首
    private int rear;//队尾
    private int[] arr;//该数组用于存放数据

    public ArrayQueue(int arrMaxSize) {
        maxSize = arrMaxSize;
        arr = new int[maxSize];
        front = -1; //指向队列头部，分析出队列是指向队列头的前一个位置
        rear = -1; //指向队列尾，指向队列尾的数据(就是队列最后一个数据)
    }

    /**
     * 判断队列是否已满
     * @return
     */
    public boolean isFull(){
        return rear==maxSize-1;
    }

    /**
     * 判断队列是否为空
     * @return
     */
    public boolean isEmpty(){
        return front == rear;
    }

    /**
     * 添加一个数据到队列中
     * @param n
     */
    public void addQueue(int n){
        if(isFull()){
            System.out.println("队列已满，不能添加数据");
            return;
        }
        arr[++rear]=n;
    }

    /**
     * 从队列中获取一个数据
     */
    public int getQueue() throws Exception {
        if(isEmpty()){
            throw new Exception("队列为空，不能取数据");
        }
        return arr[++front];
    }

    /**
     * 显示队列的所有数据
     */
    public void showQueue(){
        if(isEmpty()){
            System.out.println("队列空的，没有数据");
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(i+"="+arr[i]);
        }
    }

    /**
     * 显示队列的头数据
     * @return
     */
    public int headQueue() throws Exception {
        if(isEmpty()){
           throw new Exception("队列为空，不能取数据");
        }
        return arr[front+1];
    }

}
